Шаг 4. Отменяем коммит
Команда git revert отменяет указанный коммит. С ней нам не нужно указывать прошлый коммит, чтобы отменить тот, на который показывает HEAD или указатель ветки. Всё, что нужно сделать — указать коммит с изменениями, которые мы хотим отменить.
Плюс этой команды: коммиты, которые идут после указанного, не отменяются.
Сначала выведем два последних коммита, для этого воспользуемся командой git log --oneline -2.
Допустим, мы хотим отменить коммит с хэшем 195dfb0 — он добавляет шапку. Мы специально его выбрали, чтобы показать, что вышестоящий коммит не будет отменён.
Теперь введём команду git revert 195dfb0.
Появился конфликт, потому что в элементе <header> содержится не только заголовок, но и неупорядоченный список. Git попытался наложить входящий элемент <h1>, но у него ничего не вышло.
Решим конфликт вручную, потому что нам нужно удалить только элемент <header>, а не всё, что в нём находится.
Получится следующая картина:
Также не забываем сохранять файл после любых изменений.
У нас остался элемент <h1> и неупорядоченный список <ul>, который идёт следом. Теперь данное изменение нужно добавить в индекс с помощью команды git add --all.
Продолжим отмену коммита с помощью команды git revert --continue.
После ввода команды откроется файл COMMIT_EDITMSG, в котором можно отредактировать текст коммита. Дело в том, что при использовании команды git revert создаётся новый коммит, в котором содержатся соответствующие изменения.
Но данный коммит можно и не создавать, для этого нужно указать после хэша опцию
--no-commit, сокращённо-n. Тогда у нас получится избежать коммита, который предлагает нам Git, но полностью от этого уйти не получится. Нам вновь предстоит сделать выбор: или мы сами создаём фиксацию, или отменяем все изменения.
Мы не будем редактировать коммит, предложенный Git. Просто сохраним файл и закроем его.
Затем перейдём в Git Bash и увидим сообщение с краткой информацией о новом коммите.
Давайте выведем четыре последних коммита: убедимся, что вышестоящий не отменён, и посмотрим на новый коммит. Для этого введём команду git log --oneline -4.
Все старые коммиты остались, а также появился новый, на который сейчас показывает указатель ветки main.
Команда git revert может отменять и целую группу коммитов. Для этого нужно воспользоваться последовательностью коммитов: хеш-первого-коммита..хеш-второго-коммита. Детальная запись выглядит так: git revert 0d5c..67ae. Однако чем больше коммитов вы «захватите» в эту группу, тем выше вероятность столкнуться со сложным конфликтом, который придётся долго решать.